<?php

namespace libs\qoy;

/**
 * Cookie COOKIE操作
 * 
 * - 原生态COOKIE操作的简单封装
 * - 注意，设置的COOKIE需要在下一次才能生效
 *
 */
class Cookie {

    /**
     * COOKIE配置
     */
    protected static $config = array("path"=>null,"domain"=>null,"secure"=>false,"httponly"=>false);

    /**
     * @param string $config['path'] 路径
     * @param string $config['domain'] 域名
     * @param boolean $config['secure'] 是否加密
     * @param boolean $config['httponly'] 是否只HTTP协议
     */
    public static function init($config = array()) {
        if (empty($config)) {
            $config = DI::instance()->config->get('sys.cookie');
        }
        self::$config = array_merge(self::$config, $config);
    }

    /**
     * 获取COOKIE
     *
     * @param string $name 待获取的COOKIE名字
     * @return string/NULL/array $name为NULL时返回整个$_COOKIE，存在时返回COOKIE，否则返回NULL
     */
    public static function get($name = NULL) {
        if ($name === NULL) {
            return $_COOKIE;
        }
        return isset($_COOKIE[$name]) ? $_COOKIE[$name] : NULL;
    }

    /**
     * 设置COOKIE
     *
     * @param string $name 待设置的COOKIE名字
     * @param string/int $value 建议COOKIE值为一些简单的字符串或数字，不推荐存放敏感数据
     * @param int $expire 有效期的timestamp，为NULL时默认存放一个月
     * @param boolean
     */
    public static function set($name, $value, $expire = NULL) {
        if ($expire === NULL) {
            $expire = $_SERVER['REQUEST_TIME'] + 2592000;   //a month
        }
            
        return setcookie(
                $name, $value, $expire, self::$config['path'], self::$config['domain'], self::$config['secure'], self::$config['httponly']
        );
    }

    /**
     * 删除COOKIE
     *
     * @param strint $name 待删除的COOKIE名字
     * @param boolean
     * @see Cookie::set()
     */
    public static function delete($name) {
        return self::set($name, '', 0);
    }

    /**
     * 获取COOKIE的配置
     */
    public static function getConfig() {
        return self::$config;
    }

}
